package com.abner.design.patterns.singleton;

/**
 * 枚举方式
 * @Author: abner
 * @Date: 2022-04-22-17:46
 **/
public class SingletonType7 {

    public static void main(String[] args) {

        Singleton7 instance1 = Singleton7.INSTANCE;
        Singleton7 instance2 = Singleton7.INSTANCE;

        System.out.println(instance1 == instance2);
        System.out.println(instance1.hashCode() == instance2.hashCode());

        instance1.sayHello();
    }
}

/**
 * 优缺点:
 *      1) 这借助 JDK1.5 中添加的枚举来实现单例模式。不仅能避免多线程同步问题，而且还能防止反序列化重新创建新的对象。
 *      2) 这种方式是 Effective Java 作者 Josh Bloch 提倡的方式
 *      3) 结论：推荐使用
 */
enum Singleton7 {

    INSTANCE;

    public void sayHello() {
        System.out.println("hello!");
    }
}